¼¼
0WinMaing_xLoginProc.Load();ͼƬȳʼg_bProcState ״̬
1CLoginProcess::OnKeyDown-> m_xLogin.OnKeyDown->g_xClientSocket.OnLogin;
WSAAsyncSelectģID_SOCKCLIENT_EVENT_MSG,ˣ(¼ɫѡϷ߼)صg_xClientSocket.OnSocketMessage(wParam, lParam)д
OnSocketMessageУFD_READ¼У
2g_bProcStateжϵǰ״̬_GAME_PROCʱGameGateķ͹ϢѹPacketQУٽдOnMessageReceive鷽g_bProcState״̬CloginProcessCcharacterProcessOnMessageReceive
3CloginProcessOnSocketMessageRecieve֤ʧ(SM_ID_NOTFOUND, SM_PASSWD_FAIL)ϢյSM_PASSOK_SELECTSERVERϢSelGateбϢm_Progress = PRG_SERVER_SELE;һѡSelGate
4 m_xSelectSrv.OnButtonDown->CselectSrv. OnButtonUp->
g_xClientSocket.OnSelectServer(CM_SELECTSERVER)õIPַOnSocketMessageRecieveصSM_SELECTSERVER_OKϢҶϿloginSrvӡ g_xClientSocket.DisconnectToServer();״̬ΪPRG_TO_SELECT_CHR״̬
 
ɫѡ
1 WinMainϢѭg_xLoginProc.RenderScene(dwDelay)-> RenderScroll-> 
SetNextProc
g_xClientSocket.m_pxDefProc = g_xMainWnd.m_pxDefProcess = &g_xChrSelProc;
g_xChrSelProc.Load(); 
g_bProcState = _CHAR_SEL_PROC;
 
   2g_xChrSelProc.Load();SelGateLoginGateõIPַ
g_xClientSocket.OnQueryChar();ѯûɫϢϢCM_QUERYCHR״̬Ϊ_CHAR_SEL_PROC, m_Progress = PRG_CHAR_SELE; OnSocketMessageRecieveнյSelGate͵Ϣ
 
   3ChrStartťg_xChrSelProc.OnLButtonDown-> CSelectChr::OnButtonUp->
g_xClientSocket.OnSelChar->CM_SELCHRϢSelGate 
 
4CClientSocket::OnSocketMessage->CCharacterProcess::OnMessageReceive
(SM_STARTPLAY) ܵSelGate͵GameGateIPַϿSelGateӡm_xSelectChr.m_nRenderState = 2;
   
   5. WinMainϢѭg_xLoginProc.RenderScene ->
m_xSelectChr.Render(nLoopTime);-> CSelectChr::Render(INT   nLoopTime)-> m_nRenderState = m_nRenderState + 10; Ϊ12-> CCharacterProcess::RenderSceneִ
 
m_Progress = PRG_SEL_TO_GAME;
    m_Progress = PRG_PLAY_GAME;                            
SetNextProc();
 
6SetNextProc();ִУ g_xGameProc.Load(); g_bProcState = _GAME_PROC;Ϸ״̬
 
Ϸ߼:
1ͻ˴
 CGameProcess::Load() ʼϷصͼȲConnectToServerm_pxDefProc->OnConnectToServerӵGameGateϷطDBSrvSelGateصGameGateIPַ
     CClientSocket->ConnectToServerconnectʱGameGateGM_OPENϢGameSrvWSAAsyncSelect I/Oģͻص g_xClientSocket.OnSocketMessageȻm_pxDefProc->OnConnectToServer()CGameProcess::OnConnectToServer()ãg_xClientSocket.SendRunLogin
 
2. GameGateServerWorkerThread
GameGateServerWorkerThreadյϢThreadFuncForMsgݣMsgHdrṹ
MsgHdr.nCode    = 0xAA55AA55; //ݱ־
 MsgHdr.wIdent   = GM_DATA;    //
 
3. GameSrvServerWorkerThread̴߳
   GameSrvServerWorkerThread̴߳DoClientCertificationûϢUSERMODE_LOGIN״̬ҵLoadPlayer(CUserInfo* pUserInfo)-> LoadHumanFromDB-> SendRDBSocketDB_LOADHUMANRCD󣬷ظҵϢ
 
4. ͻ˵¼֤(GameSrv߳ProcessLogin
  û֤GameSrv߳ProcessLoging_xReadyUserInfoList2бжûǷѾ¼һ¼͵LoadPlayer()
a. Ϸ״̬m_btCurrentMode״̬ΪUSERMODE_PLAYGAME
b. Ʒãħȡ
c. pUserInfo->m_pxPlayerObject->Initialize();ʼûϢû꣬򣬵ͼ
   Initializẹִ
1)       AddProcess(this, RM_LOGON, 0, 0, 0, 0, NULL);¼Ϣ
2)       m_pMap->AddNewObject ͼеԪбϷҡOS_MOVINGOBJECT״̬
3)       AddRefMsg(RM_TURN ΧȺ RM_TURNϢԼΪģ24*24ĿбϢ)㲥 AddProcess
4)       RecalcAbilitys ҵԣ֣·ȣ
5)       ѭϷҵĸƷЩƷӵ֣·ȣĹ
6)       RM_CHARSTATUSCHANGEDϢ֪ͨ״̬ıϢ
7)       AddProcess(this, RM_ABILITY, 0, 0, 0, 0, NULL); ȼ
AddProcess(this, RM_SUBABILITY, 0, 0, 0, 0, NULL); 
AddProcess(this, RM_DAYCHANGING, 0, 0, 0, 0, NULL); Уʱ
AddProcess(this, RM_SENDUSEITEMS, 0, 0, 0, 0, NULL); װ
AddProcess(this, RM_SENDMYMAGIC, 0, 0, 0, 0, NULL); ħ
         SysMsg(szMsg, 1) 
ûݴg_xReadyUserInfoList2бɾ
 
   ˵
һ֤ͨʹ֤биңı״̬LoadPlayerûԴͼмûϢû24*24ڵĿҷϢGameSrv㲥ߣ꣩ϢҷϢȼװħȣ
